*. Sticky Notes


There's lots of floating ROM space.

> The space log does show large amounts of unused areas. Even 16KB banks.


The script is rather straightforward with minimal control codes. Huffman compression is used to break down the size into _4_ text banks (0,4,8,C) of 16-bit pointers. With no wrapping overflow.

> Assembly for 24-bit pointers are now in place (see t1 in the z80_asm). Bank wrap detection is now in-place to make use of the 'discarded' ROM space left by the original algorithm.


Atlas is modified from the original version to run on vc6 (no DLLs) plus support to insert raw binary files and file pointer warnage.

> Look at 'asm.txt' for some examples. Makes it easier to manage assembly changes with space reports in the Atlas log.


The dumper uses a full 'dump_table.txt' of 256 font tile codes. It can be filled using UTF-8 or SJIS.

> Use VBA and look at the 'Tile Viewer' 0x8800 block. Fill in __all__ 256 font tiles.


The print routine uses a symbol translation table. And a raw copy routine _now_ replaces the Huffman. So start talking.

> Logical 'tables' are used to break down the alphabet into two sized chunks. Flag codes ($7B,$7D) flips between the alphabets using an offset range. Making the Huffman inserter more of a pain to ponder (a nephew of 'Lagrange Point') - the same basic codes can represent two values.

On top of that, the font values go through a table mapping. The final script outputs the results of this mapping.

So a raw copy routine is used, freeing register 'C' (see t1_1). These are direct font values from the script.


Not using the mapping table will break the game. Right..?

> Yes it does! A design decision is made in the Atlas asm file to use the DIRECT font value, which will prevent $00,$01,$0A from being used.

We gain simplicity instead. And precious time that shouldn't be spent on _this_ type of Huffman when possible.


So how to detect those rogue strings?

> It's recommended that you use VBA-GZ with its memory logging.

hook_pc1 1 716c5 716c5

This will capture all font bytes that go through the mapping --> screen.


ex. Naming screen

Enter a character at said place. This pops up.

[0716c5] 56c5 13     INC DE         AF=7bc0 BC=0014 DE=5a8d HL=c5b2 SP=cdd8 P1=070000 vc=60 bI
[0716c5] 56c5 13     INC DE         AF=b700 BC=007b DE=5a8e HL=c5b3 SP=cdd8 P1=070000 vc=61 BI
[0716c5] 56c5 13     INC DE         AF=d820 BC=00b7 DE=5a8f HL=c5b4 SP=cdd8 P1=070000 vc=61 BI
[0716c5] 56c5 13     INC DE         AF=b600 BC=00d8 DE=5a90 HL=c5b5 SP=cdd8 P1=070000 vc=61 bI
[0716c5] 56c5 13     INC DE         AF=b400 BC=00b6 DE=5a91 HL=c5b6 SP=cdd8 P1=070000 vc=61 bI
[0716c5] 56c5 13     INC DE         AF=7d00 BC=00b4 DE=5a92 HL=c5b7 SP=cdd8 P1=070000 vc=62 BI
[0716c5] 56c5 13     INC DE         AF=0000 BC=007d DE=5a93 HL=c5b8 SP=cdd8 P1=070000 vc=62 BI

[0716c5] 56c5 13     INC DE         AF=7bc0 BC=0014 DE=5a9a HL=c5c6 SP=cdd8 P1=070000 vc=71 bI
[0716c5] 56c5 13     INC DE         AF=b900 BC=007b DE=5a9b HL=c5c7 SP=cdd8 P1=070000 vc=71 bI
[0716c5] 56c5 13     INC DE         AF=af20 BC=00b9 DE=5a9c HL=c5c8 SP=cdd8 P1=070000 vc=72 BI
[0716c5] 56c5 13     INC DE         AF=c300 BC=00af DE=5a9d HL=c5c9 SP=cdd8 P1=070000 vc=72 BI
[0716c5] 56c5 13     INC DE         AF=b200 BC=00c3 DE=5a9e HL=c5ca SP=cdd8 P1=070000 vc=72 bI
[0716c5] 56c5 13     INC DE         AF=7d00 BC=00b2 DE=5a9f HL=c5cb SP=cdd8 P1=070000 vc=72 bI
[0716c5] 56c5 13     INC DE         AF=0000 BC=007d DE=5aa0 HL=c5cc SP=cdd8 P1=070000 vc=73 BI

Using a raw hex search, we find $71A8D and $71A9A as our causes.